|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~\Глагол\Отделы\Обмен~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ Окно; (*============================================================================* * НАЗНАЧЕНИЕ: ввод и вывод текста в Графическое или Консольное окно *============================================================================*) ИСПОЛЬЗУЕТ ЦвЗнак, Ввод, ГОС, КОС; (* ссылка на соответствующие задачи из ГОС и КОС *) ПЕР ПисатьЦвет- :ЗАДАЧА(с,к:ЦЕЛ; цвет:ЗНАК); ПисатьЗнак- :ЗАДАЧА(с,к:ЦЕЛ; цвет:ЗНАК); ЧитатьЦвет- :ЗАДАЧА(с,к:ЦЕЛ):ЗНАК; ЧитатьЗнак- :ЗАДАЧА(с,к:ЦЕЛ):ЗНАК; Вверх- :ЗАДАЧА(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид); Вниз- :ЗАДАЧА(вс,лк,нс,пк:ЦЕЛ; новЗнак-:ЦвЗнак.Вид); ПисатьСтроку- :ЗАДАЧА(цвСтрока-:ЦвЗнак.Строка; с,к,длина:ЦЕЛ); ПереместитьУказку- :ЗАДАЧА(с,к:ЦЕЛ); РазмерУказки- :ЗАДАЧА(размер:ЦЕЛ); Опрос- :ЗАДАЧА(отКлавиш+:Ввод.ОтКлавиш; отМышки+:Ввод.ОтМышки):ЦЕЛ; РазмерЭкрана- :ЗАДАЧА(строк+,колонок+:ЦЕЛ); ИзменитьРазмер- :ЗАДАЧА(строк,колонок:ЦЕЛ); СоздатьЧасы- :ЗАДАЧА(номер,время:ЦЕЛ):ЦЕЛ; УдалитьЧасы- :ЗАДАЧА(номерУд:ЦЕЛ); Показать- :ЗАДАЧА; Отработать- :ЗАДАЧА; (******************************************************************************) ЗАДАЧА Графическое-(имяПриложения-,имяШрифта-:ЦЕПЬ; размерШрифта:ЦЕЛ; задачаЧасы:ГОС.ВидЗадачиЧасы); (* Цель: подготовка к работе графического окна *) УКАЗ ПисатьЦвет :=ГОС.ПисатьЦвет; ПисатьЗнак :=ГОС.ПисатьЗнак; ЧитатьЦвет :=ГОС.ЧитатьЦвет; ЧитатьЗнак :=ГОС.ЧитатьЗнак; Вверх :=ГОС.Вверх; Вниз :=ГОС.Вниз; ПисатьСтроку :=ГОС.ПисатьСтроку; ПереместитьУказку:=ГОС.ПереместитьУказку; РазмерУказки :=ГОС.РазмерУказки; Опрос :=ГОС.Опрос; РазмерЭкрана :=ГОС.РазмерЭкрана; ИзменитьРазмер :=ГОС.ИзменитьРазмерОкна; СоздатьЧасы :=ГОС.СоздатьЧасы; УдалитьЧасы :=ГОС.УдалитьЧасы; Показать :=ГОС.ПоказатьОкно; Отработать :=ГОС.Отработать; ГОС.Подготовить(имяПриложения,имяШрифта,размерШрифта,задачаЧасы) КОН Графическое; (******************************************************************************) ЗАДАЧА Текстовое-(задачаЧасы:КОС.ВидЗадачиЧасы); (* Цель: подготовка к работе консольного окна *) УКАЗ ПисатьЦвет :=КОС.ПисатьЦвет; ПисатьЗнак :=КОС.ПисатьЗнак; ЧитатьЦвет :=КОС.ЧитатьЦвет; ЧитатьЗнак :=КОС.ЧитатьЗнак; Вверх :=КОС.Вверх; Вниз :=КОС.Вниз; ПисатьСтроку :=КОС.ПисатьСтроку; ПереместитьУказку:=КОС.ПереместитьУказку; РазмерУказки :=КОС.РазмерУказки; Опрос :=КОС.Опрос; РазмерЭкрана :=КОС.РазмерЭкрана; ИзменитьРазмер :=КОС.ИзменитьРазмерОкна; СоздатьЧасы :=КОС.СоздатьЧасы; УдалитьЧасы :=КОС.УдалитьЧасы; Показать :=КОС.ПоказатьОкно; Отработать :=КОС.Отработать; КОС.Подготовить(задачаЧасы) КОН Текстовое; (******************************************************************************) ЗАДАЧА Пробел-(вс,лк,нс,пк:ЦЕЛ); (* Заполняет прямоугольник пробелом. *) ПЕР с,к:ЦЕЛ; УКАЗ ОТ с:=вс ДО нс ВЫП ОТ к:=лк ДО пк ВЫП ПисатьЗнак(с,к,' ') КОН КОН КОН Пробел; (******************************************************************************) ЗАДАЧА Цвет-(вс,лк,нс,пк:ЦЕЛ; цвет:ЗНАК); (* Устанавливает цвет прямоугольника. *) ПЕР с,к:ЦЕЛ; УКАЗ ОТ с:=вс ДО нс ВЫП ОТ к:=лк ДО пк ВЫП ПисатьЦвет(с,к,цвет) КОН КОН КОН Цвет; (******************************************************************************) ЗАДАЧА ЦветнойПробел-(вс,лк,нс,пк:ЦЕЛ; цвет:ЗНАК); (* Заполняет прямоугольник пробелом заданного цвета. *) ПЕР строка:ЦвЗнак.Строка; пробел:ЦвЗнак.Вид; с,к,пко:ЦЕЛ; УКАЗ пробел.знак:=" "; пробел.цвет:=цвет; пко:=пк-лк; ОТ к:=0 ДО пко ВЫП строка[к]:=пробел КОН; ОТ с:=вс ДО нс ВЫП ПисатьСтроку(строка,с,лк,пко+1) КОН КОН ЦветнойПробел; (******************************************************************************) ЗАДАЧА Тень-(вс,лк,нс,пк:ЦЕЛ); (* Снаружи прямоугольника рисует тень. *) ПЕР с,к:ЦЕЛ; ЗАДАЧА Потушить(с,к:ЦЕЛ); УКАЗ ПисатьЦвет(с,к,ВЗНАК(ВЦЕЛ(ЧитатьЦвет(с,к)) ОСТАТОК 8)) КОН Потушить; УКАЗ УВЕЛИЧИТЬ(пк); УВЕЛИЧИТЬ(нс); ОТ с:=вс+1 ДО нс ВЫП Потушить(с,пк) КОН; ОТ к:=лк+1 ДО пк ВЫП Потушить(нс,к) КОН КОН Тень; (******************************************************************************) ЗАДАЧА Рамка1-(вс,лк,нс,пк:ЦЕЛ); (* Обрамляет прямоугольник одинарной линией. *) ПЕР с,к:ЦЕЛ; УКАЗ ПисатьЗнак(вс,лк,250CX); ПисатьЗнак(нс,лк,2514X); ПисатьЗнак(вс,пк,2510X); ПисатьЗнак(нс,пк,2518X); ОТ к:=лк+1 ДО пк-1 ВЫП ПисатьЗнак(вс,к,2500X); ПисатьЗнак(нс,к,2500X) КОН; ОТ с:=вс+1 ДО нс-1 ВЫП ПисатьЗнак(с,лк,2502X); ПисатьЗнак(с,пк,2502X) КОН КОН Рамка1; (******************************************************************************) ЗАДАЧА Рамка2-(вс,лк,нс,пк:ЦЕЛ); (* Обрамляет прямоугольник двойной линией. *) ПЕР с,к:ЦЕЛ; УКАЗ ПисатьЗнак(вс,лк,2554X); ПисатьЗнак(нс,лк,255AX); ПисатьЗнак(вс,пк,2557X); ПисатьЗнак(нс,пк,255DX); ОТ к:=лк+1 ДО пк-1 ВЫП ПисатьЗнак(вс,к,2550X); ПисатьЗнак(нс,к,2550X) КОН; ОТ с:=вс+1 ДО нс-1 ВЫП ПисатьЗнак(с,лк,2551X); ПисатьЗнак(с,пк,2551X) КОН КОН Рамка2; (******************************************************************************) ЗАДАЧА Черта-(вс,лк,нс,пк:ЦЕЛ); (* Рисует горизонтальную или вертикальную черту, учитывая пересечения. *) ПЕР с,к:ЦЕЛ; зн:ЗНАК; УКАЗ ЕСЛИ вс = нс ТО (* горизонтальная черта *) зн:=ЧитатьЗнак(вс,лк); ЕСЛИ зн = 2502X ТО зн:=251CX АЕСЛИ зн = 2551X ТО зн:=255FX ИНАЧЕ зн:=2500X КОН; ПисатьЗнак(вс,лк,зн); ОТ к:=лк+1 ДО пк-1 ВЫП зн:=ЧитатьЗнак(вс,к); ЕСЛИ зн = 2502X ТО зн:=253CX АЕСЛИ зн = 2551X ТО зн:=256BX ИНАЧЕ зн:=2500X КОН; ПисатьЗнак(вс,к,зн) КОН; зн:=ЧитатьЗнак(нс,пк); ЕСЛИ зн = 2502X ТО зн:=2524X АЕСЛИ зн = 2551X ТО зн:=2562X ИНАЧЕ зн:=2500X КОН; ПисатьЗнак(нс,пк,зн); ИНАЧЕ (* вертикальная черта *) зн:=ЧитатьЗнак(вс,лк); ЕСЛИ зн = 2500X ТО зн:=252CX АЕСЛИ зн = 2550X ТО зн:=2564X ИНАЧЕ зн:=2502X КОН; ПисатьЗнак(вс,лк,зн); ОТ с:=вс+1 ДО нс-1 ВЫП зн:=ЧитатьЗнак(с,лк); ЕСЛИ зн = 2500X ТО зн:=253CX АЕСЛИ зн = 2550X ТО зн:=256AX ИНАЧЕ зн:=2502X КОН; ПисатьЗнак(с,лк,зн) КОН; зн:=ЧитатьЗнак(нс,пк); ЕСЛИ зн = 2500X ТО зн:=2534X АЕСЛИ зн = 2550X ТО зн:=2567X ИНАЧЕ зн:=2502X КОН; ПисатьЗнак(нс,пк,зн) КОН КОН Черта; (******************************************************************************) ЗАДАЧА Цепь-(вс,лк,нс,пк:ЦЕЛ; цепь-:ЦЕПЬ); (* Записывает цепочку знаков в прямоугольную область. *) ПЕР поз:ЦЕЛ; с,к:ЦЕЛ; знак:ЗНАК; длина:ЦЕЛ; былаВолна:КЛЮЧ; УКАЗ былаВолна:=ОТКЛ; поз:=0; с:=вс; длина:=ДЛИНА(цепь); ПОКА с <= нс ВЫП к:=лк; ПОКА к <= пк ВЫП ЕСЛИ поз >= длина ТО ВОЗВРАТ КОН; знак:=цепь[поз]; ЕСЛИ былаВолна ТО ПисатьЗнак(с,к,знак); былаВолна:=ОТКЛ ИНАЧЕ ЕСЛИ знак = '^' ТО к:=пк АЕСЛИ знак = '~' ТО былаВолна:=ВКЛ ИНАЧЕ ПисатьЗнак(с,к,знак) КОН КОН; УВЕЛИЧИТЬ(поз); УВЕЛИЧИТЬ(к) КОН; УВЕЛИЧИТЬ(с) КОН КОН Цепь; КОН Окно. |
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com
|
|